package com.baidu.day02;

import java.util.LinkedList;
import java.util.Scanner;

/**
 * Create with Intellij IDEA
 *
 * @Author Q
 * @date 2021/11/23/15:14
 */
public class BracketsDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("输入括号:>");
        String line = sc.nextLine();

        if(match(line))
            System.out.println("括号匹配成功!");
        else
            System.out.println("括号匹配失败!");
    }
    //LinkedList应用 - 栈列
    //栈 - 先进后出
    //[ ( ] )

    // 栈顶
    //  )
    //  ]
    //  (
    //  [
    //
    //
    //

    //    ( )[ ]{ }
    // [
    private static boolean match(String line) {
        //将输入的字符串打散成字符数组
        char[] arr = line.toCharArray();
        //构建一个LinkedList对象
        LinkedList<Character> list = new LinkedList<>();
        //先将arr的第一个元素压入栈顶
        list.push(arr[0]);

        //从arr的第二个位置开始遍历
        for (int i = 1; i < arr.length; i++) {
            Character c = arr[i];//char->Character
            //获取栈顶的元素
            if(list.isEmpty()){
                list.push(c);
                continue;
            }
            Character first = list.getFirst();
            if((first.equals('(') && c.equals(')')) ||
                    (first.equals('[') && c.equals(']')) ||
                    first.equals('{') && c.equals('}')){
                //弹出栈顶元素
                list.pop();
            }else{
                //继续压栈
                list.push(c);
            }
        }
        return list.isEmpty();
    }
}
